// mysignal.cc
#include <iostream>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
using namespace std;

// 参数int：收到了哪一个信号
void myhandler(int signo)
{
    cout << "process get a signal: " << signo << endl;
    // exit(1);
}

// int main()
// {
//     signal(SIGABRT, myhandler);  // 6号信号

//     int cnt = 0;
//     while (true)
//     {
//         cout << "I am a process, pid: " << getpid() << endl;
//         sleep(1);
//         ++cnt;
//         if (cnt % 2 == 0)
//         {
//             // raise(2);  // 封装了kill(getpid(), sig)
//             abort();  // 封装了kill(getpid(), 6)，另外还多做了一步，让进程必须退出
//         }
//     }
//     return 0;
// }

int main()
{
    // 把收到2号信号的处理动作改成去执行myhandler函数
    //signal(2, myhandler);  // Ctrl+C
    //signal(3, myhandler);  // Ctrl+\ 
    //signal(19, myhandler);  // Ctrl+Z，19号信号不可被捕捉

    // 捕捉所有信号，经过验证，9号和19号信号不可被捕捉
    for (int i = 1; i < 32; ++i)
    {
        signal(i, myhandler);
    }

    while (true)
    {
        cout << "I am a crazy process: " << getpid() << endl;
        sleep(1);
    }

    return 0;
}